home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / nfsd / export.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.0 KB  |  156 lines

  1. /*
  2.  * include/linux/nfsd/export.h
  3.  * 
  4.  * Public declarations for NFS exports. The definitions for the
  5.  * syscall interface are in nfsctl.h
  6.  *
  7.  * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de>
  8.  */
  9.  
  10. #ifndef NFSD_EXPORT_H
  11. #define NFSD_EXPORT_H
  12.  
  13. #include <asm/types.h>
  14. #ifdef __KERNEL__
  15. # include <linux/types.h>
  16. # include <linux/in.h>
  17. #endif
  18.  
  19. /*
  20.  * Important limits for the exports stuff.
  21.  */
  22. #define NFSCLNT_IDMAX        1024
  23. #define NFSCLNT_ADDRMAX        16
  24. #define NFSCLNT_KEYMAX        32
  25.  
  26. /*
  27.  * Export flags.
  28.  */
  29. #define NFSEXP_READONLY        0x0001
  30. #define NFSEXP_INSECURE_PORT    0x0002
  31. #define NFSEXP_ROOTSQUASH    0x0004
  32. #define NFSEXP_ALLSQUASH    0x0008
  33. #define NFSEXP_ASYNC        0x0010
  34. #define NFSEXP_GATHERED_WRITES    0x0020
  35. /* 40 80 100 currently unused */
  36. #define NFSEXP_NOHIDE        0x0200
  37. #define NFSEXP_NOSUBTREECHECK    0x0400
  38. #define    NFSEXP_NOAUTHNLM    0x0800        /* Don't authenticate NLM requests - just trust */
  39. #define NFSEXP_MSNFS        0x1000    /* do silly things that MS clients expect */
  40. #define NFSEXP_FSID        0x2000
  41. #define    NFSEXP_CROSSMOUNT    0x4000
  42. #define    NFSEXP_NOACL        0x8000    /* reserved for possible ACL related use */
  43. #define NFSEXP_ALLFLAGS        0xFE3F
  44.  
  45. /* The flags that may vary depending on security flavor: */
  46. #define NFSEXP_SECINFO_FLAGS    (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
  47.                     | NFSEXP_ALLSQUASH)
  48.  
  49. #ifdef __KERNEL__
  50.  
  51. /*
  52.  * FS Locations
  53.  */
  54.  
  55. #define MAX_FS_LOCATIONS    128
  56.  
  57. struct nfsd4_fs_location {
  58.     char *hosts; /* colon separated list of hosts */
  59.     char *path;  /* slash separated list of path components */
  60. };
  61.  
  62. struct nfsd4_fs_locations {
  63.     uint32_t locations_count;
  64.     struct nfsd4_fs_location *locations;
  65. /* If we're not actually serving this data ourselves (only providing a
  66.  * list of replicas that do serve it) then we set "migrated": */
  67.     int migrated;
  68. };
  69.  
  70. /*
  71.  * We keep an array of pseudoflavors with the export, in order from most
  72.  * to least preferred.  For the forseeable future, we don't expect more
  73.  * than the eight pseudoflavors null, unix, krb5, krb5i, krb5p, skpm3,
  74.  * spkm3i, and spkm3p (and using all 8 at once should be rare).
  75.  */
  76. #define MAX_SECINFO_LIST    8
  77.  
  78. struct exp_flavor_info {
  79.     u32    pseudoflavor;
  80.     u32    flags;
  81. };
  82.  
  83. struct svc_export {
  84.     struct cache_head    h;
  85.     struct auth_domain *    ex_client;
  86.     int            ex_flags;
  87.     struct path        ex_path;
  88.     char            *ex_pathname;
  89.     uid_t            ex_anon_uid;
  90.     gid_t            ex_anon_gid;
  91.     int            ex_fsid;
  92.     unsigned char *        ex_uuid; /* 16 byte fsid */
  93.     struct nfsd4_fs_locations ex_fslocs;
  94.     int            ex_nflavors;
  95.     struct exp_flavor_info    ex_flavors[MAX_SECINFO_LIST];
  96. };
  97.  
  98. /* an "export key" (expkey) maps a filehandlefragement to an
  99.  * svc_export for a given client.  There can be several per export,
  100.  * for the different fsid types.
  101.  */
  102. struct svc_expkey {
  103.     struct cache_head    h;
  104.  
  105.     struct auth_domain *    ek_client;
  106.     int            ek_fsidtype;
  107.     u32            ek_fsid[6];
  108.  
  109.     struct path        ek_path;
  110. };
  111.  
  112. #define EX_SECURE(exp)        (!((exp)->ex_flags & NFSEXP_INSECURE_PORT))
  113. #define EX_ISSYNC(exp)        (!((exp)->ex_flags & NFSEXP_ASYNC))
  114. #define EX_NOHIDE(exp)        ((exp)->ex_flags & NFSEXP_NOHIDE)
  115. #define EX_WGATHER(exp)        ((exp)->ex_flags & NFSEXP_GATHERED_WRITES)
  116.  
  117. int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp);
  118. __be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp);
  119.  
  120. /*
  121.  * Function declarations
  122.  */
  123. int            nfsd_export_init(void);
  124. void            nfsd_export_shutdown(void);
  125. void            nfsd_export_flush(void);
  126. void            exp_readlock(void);
  127. void            exp_readunlock(void);
  128. struct svc_export *    rqst_exp_get_by_name(struct svc_rqst *,
  129.                          struct vfsmount *,
  130.                          struct dentry *);
  131. struct svc_export *    rqst_exp_parent(struct svc_rqst *,
  132.                     struct vfsmount *mnt,
  133.                     struct dentry *dentry);
  134. int            exp_rootfh(struct auth_domain *, 
  135.                     char *path, struct knfsd_fh *, int maxsize);
  136. __be32            exp_pseudoroot(struct svc_rqst *, struct svc_fh *);
  137. __be32            nfserrno(int errno);
  138.  
  139. extern struct cache_detail svc_export_cache;
  140.  
  141. static inline void exp_put(struct svc_export *exp)
  142. {
  143.     cache_put(&exp->h, &svc_export_cache);
  144. }
  145.  
  146. static inline void exp_get(struct svc_export *exp)
  147. {
  148.     cache_get(&exp->h);
  149. }
  150. struct svc_export * rqst_exp_find(struct svc_rqst *, int, u32 *);
  151.  
  152. #endif /* __KERNEL__ */
  153.  
  154. #endif /* NFSD_EXPORT_H */
  155.  
  156.